package com.roads.project.service;

import java.util.List;
import com.roads.project.domain.ProInstitution;
import com.roads.project.domain.ProInstitutionDetail;
import com.roads.project.domain.ProProject;

/**
 * 机构Service接口
 * 
 * @author nhp
 * @date 2021-11-16
 */
public interface IProInstitutionService {

    /**
     * 查询机构
     * 
     * @param institutionId 机构主键
     * @return 机构
     */
    ProInstitution selectProInstitutionByInstitutionId(Integer institutionId);

    /**
     * 根据编码查询信息
     *
     * @param code 机构编码
     * @return 详细机构
     */
    ProInstitution getModelByInnerCode(String code);

    /**
     * 根据编码查询详细信息
     *
     * @param code 机构编码
     * @return 详细机构
     */
    ProInstitutionDetail getDetailModelByInnerCode(String code);

    /**
     * 查询项目下机构数量
     *
     * @param projectId 项目ID
     * @return 数量
     */
    int countByProjectId(Integer projectId);

    /**
     * 查询机构列表
     * 
     * @param proInstitution 机构
     * @return 机构集合
     */
    List<ProInstitution> selectProInstitutionList(ProInstitution proInstitution);

    /**
     * 查询全部机构列表
     *
     * @param proInstitution 机构
     * @return 机构集合
     */
    List<ProInstitution> selectProInstitutionListAll(ProInstitution proInstitution);

    /**
     * 查看项目下所有标段类型机构
     *
     * @param projectId 项目ID
     * @return 标段机构集合
     */
    List<ProInstitution> dropDownBidByProjectId(Integer projectId);

    /**
     * 查询项目下所有驻地类型机构
     *
     * @param projectId 项目ID
     * @return 驻地机构集合
     */
    List<ProInstitution> dropDownZdBidByProjectId(Integer projectId);

    /**
     * 查询项目下所有监理类型机构
     *
     * @param projectId 项目ID
     * @return 监理机构集合
     */
    List<ProInstitution> dropDownJlBidByProjectId(Integer projectId);

    /**
     * 查询项目下所有总监类型机构
     *
     * @param projectId 项目ID
     * @return 总监机构集合
     */
    List<ProInstitution> dropDownZjBidByProjectId(Integer projectId);

    /**
     * 查询项目下所有代建类型机构
     *
     * @param projectId 项目ID
     * @return 代建机构集合
     */
    List<ProInstitution> dropDownDjBidByProjectId(Integer projectId);

    /**
     * 查询项目下所有业主类型机构
     *
     * @param projectId 项目ID
     * @return 业主机构集合
     */
    List<ProInstitution> dropDownYzBidByProjectId(Integer projectId);

    /**
     * 根据项目ID查询所有标段和分部机构
     *
     * @param projectId 项目ID
     * @return 结果
     */
    List<ProInstitution> selectBidListByProjectId(Integer projectId);

    /**
     * 根据用户查询项目下所有标段和分部机构
     *
     * @param projectId 项目ID
     * @param user 用户
     * @return 结果
     */
    List<ProInstitution> selectBidListByUserAndProjectId(Integer projectId, String user);

    /**
     * 校验机构编码是否唯一
     *
     * @param proInstitution 机构
     * @return 结果
     */
    String checkInstitutionCodeUnique(ProInstitution proInstitution);

    /**
     * 新增机构
     * 
     * @param proInstitution 机构
     * @return 结果
     */
    int insertProInstitution(ProInstitution proInstitution);

    /**
     * 修改机构
     * 
     * @param proInstitution 机构
     * @return 结果
     */
    int updateProInstitution(ProInstitution proInstitution);

    /**
     * 批量删除机构
     * 
     * @param institutionIds 需要删除的机构主键集合
     * @return 结果
     */
    int deleteProInstitutionByInstitutionIds(Integer[] institutionIds);

    /**
     * 删除机构信息
     * 
     * @param institutionId 机构主键
     * @return 结果
     */
    int deleteProInstitutionByInstitutionId(Integer institutionId);

    /**
     * 根据ID获取标段详情
     *
     * @param institutionId 标段ID
     * @return 标段详情
     */
    ProInstitutionDetail getInstitutionDetailById(Integer institutionId);

    /**
     * 修改标段详情
     *
     * @param detail 标段详情
     * @return 结果
     */
    int updateInstitutionDetail(ProInstitutionDetail detail);

}
